package com.imooc.miaosha.validator;


import com.imooc.miaosha.util.ValidatorUtil;
import org.springframework.util.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * {@link IsMobile}注解处理类
 */
public class IsMobileValidator implements ConstraintValidator<IsMobile, String> {
    private boolean required = false;
    private String message;

    @Override
    public void initialize(IsMobile constraintAnnotation) {
        /*IsMobile是对应的注解类，其实这里的作用是拿到注解类里面的参数，比如这里调用的required()，
        * 而具体的值是用户在使用这个注解的时候设置的，比如：
        * @IsMobile(required=true,message="校验")
        * String mobile="18286601156";
        * */
        required=constraintAnnotation.required();
        message= constraintAnnotation.message();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        /*value应该表示的是**被**注解的变量对应的值，这也是个泛型，是ConstraintValidator<K,V>泛型中的V设置的值。
        * 这个方法应该就是具体的业务逻辑，拿到需要校验的参数值value进行自定义校验*/
        if (required)
            return ValidatorUtil.isMobile(value);
        else {
            if (!StringUtils.hasLength(value)) return true;
            else return ValidatorUtil.isMobile(value);
        }
    }
}
